/**
 * 给你一个字符串 s 和一个字符规律 p，请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。
 *
 *     '.' 匹配任意单个字符
 *     '*' 匹配零个或多个前面的那一个元素
 *
 * 所谓匹配，是要涵盖 整个 字符串 s的，而不是部分字符串。
 */
public class Solution_10 {
    public boolean isMatch(String text,String pattern) {
        /**
         * 都为空是返回true
         */
        if (pattern.isEmpty()) {
            return text.isEmpty();
        }

        /**
         * 通过第一个字符判断是否匹配
         * 1、都是字符且相同
         * 2、pattern中第一个字符为 .
         */
        boolean fMatch = (!text.isEmpty()
                && (pattern.charAt(0) == text.charAt(0) || pattern.charAt(0) == '.'));

        /**
         * 进行匹配时遇到 *则分两种情况：
         *      1、*表示匹配0个前面的字符
         *      2、*表示匹配1个或多个前面的字符
         *
         * 若没有*则逐个进行匹配
         */
        if (pattern.length() >= 2 && pattern.charAt(1) == '*') {
            return (isMatch(text,pattern.substring(2)))
            || (fMatch && isMatch(text.substring(1),pattern));
        }else {
            return fMatch && isMatch(text.substring(1),pattern.substring(1));
        }
    }
}
